Optical scanning systems are used throughout industry for many applications. One such application is bar code scanning and decoding. Bar code symbols are printed on many products and packages today allowing for high speed, accurate and efficient routing of the parcels throughout packaging, shipping and sorting facilities. These bar codes are either printed on the outside of the package in an easily visible location or printed on a label affixed to the outside of the package so that they can be scanned by bar code readers and scanning devices.
Often, these bar code scanning devices are mounted above a conveyor belt and the packages being scanned are placed on a conveyor belt which moves below the scanning device. As the packages pass beneath the scanning device, the bar code is read and decoded.
The positioning of these bar codes on the package is critical for proper scanning and decoding. If the bar code is positioned at any angle, other than a right angle, to the path of the scanning laser beam, the entire bar code may not be scanned in one sweep, resulting in an incomplete scan and a bar code fragment being retrieved. If this occurs, several of these fragments will then have to be "stitched" together to assemble an entire bar code. There are several methods known in the field of bar code scanning to accomplish this stitching and reconstruction of bar codes.
One method of assembling a complete bar code from incomplete fragments checks the individual fragments to see if they contain a start or stop mark. If the scan contains both, the bar code is deemed complete and processing stops. However, in the event that the scan is incomplete, successive scan fragments are superimposed on top of the previous scan fragment until a complete bar code is assembled. The successive scan fragments are aligned with the previous fragments by repeatedly shifting the individual successive fragments until a match is found between the bars and spaces of the bar code and, at that point, the successive fragments are superimposed on top of each other.
There are several problems associated with this method, all which originate from the fact that successive fragments are repeatedly shifted until they are in alignment with the previous fragment. This approach to aligning fragments requires considerable processor power, resulting in CPU loading and slow performance. This situation is only exacerbated when the scan length, or data string length, is considerably long resulting in a high number of shifts required to align each successive fragment.
An alternate method of "stitching" incomplete bar code fragments into a complete bar code scans individual bar code fragments and repeatedly stores them in data registers. Several comparisons are made to determine whether the fragments scanned are within acceptable tolerances and to determine the symbology ratio of the bar code scanned. In the event that the data scanned is valid, it is transferred to a state machine which assembles the individual data elements (e.g. the bars and spaces) into data strings. The processor in this system monitors several variables from successive fragments, such as label position value and narrow width value. In the event that these variables indicate that a match is probable, the current scan fragment is repeatedly shifted until it is aligned with the previous fragment. Since this method utilizes the same repeated shifting alignment method, it suffers from the same shortcomings as the previous method (high CPU utilization and low performance).
A slightly modified method of assembling bar code fragments utilizes a position counter to specify a middle portion of each scan fragment to be examined for alignment purposes. This method looks for matching data strings within this valid middle portion to determine when there is a match between a current scan fragment and its previous scan fragment. In the event that a match is found, the scanned fragment is repeatedly shifted until alignment occurs with that of the previous scan fragment. Again, this system suffers from the same problems (high CPU utilization and low performance) that afflict the previously-described methods.
Another method of reconstructing a bar code from incomplete bar code fragments utilizes several timing measurements concerning: the time the scan sweep starts; the time the first data element is scanned; and the time the scan sweep stops, to reconstruct a complete bar code. These three timing measurements are used to calculate parcel velocity and to predict the location of matching portions, or data elements, within each scan fragment. These measurements enable this method to calculate an offset which is used to shift subsequent fragments, relative to the previous fragment, so that the bar code fragments can be aligned.
Since this method relies on and requires highly accurate time measurements to predict the location of matching data portions within each fragment, precision tolerances are required concerning the optics, opto-mechanics, and electronics utilized by a system employing this method. This results in the system being prohibitively expensive and requiring a high level of maintenance to ensure that such precise tolerances are maintained. Additionally, since the valid middle portion of each scan fragment is scrutinized to determine when a match occurs, this scanning method relies on the content of the data scanned to accurately align the numerous scan fragments. Therefore, any inaccuracy in the data retrieved from the individual data elements within each fragment Will result in a misalignment of the scan fragments.
Yet another method of assembling a complete bar code from individual bar code fragments repeatedly scans the bar code to generate bar code fragments. During use, once a bar code is found, the first bar code fragment is aligned with the second bar code fragment by aligning the leading edge of the first data element in each fragment. Once these two elements are aligned, a measurement is taken to determine the offset between these two fragments. This offset measurement is then used to align and assemble all subsequent fragments until a complete bar code is constructed. To align subsequent fragments, each fragment is analyzed to determine an alignment bar, or data element, within each fragment. This particular salient data element is selected as an alignment indicia, which is essentially a data element present in both fragments. The salient indicia are aligned to shift one of the fragments so that both fragments are aligned.
There are several problems associated with this method, including those of the previous method e.g. requiring extremely precise components, relying on the content of the bar code label to align subsequent scans. Additionally, this method requires that at least two scans pass through the leading edge of the bar code being scanned because the first two scans of the bar code are aligned, based on this leading edge, to determine the value of the offset utilized to shift subsequent scans. If a conveyor belt is utilized in which the packaging on the conveyor belt is moving at a high rate of speed, it is possible that only one scan would pass through the leading edge of the bar code element. In the event of a slowly moving scanning beam, the same result would occur. Additionally, since the scanning beam tends to move at a very high rate of speed, this device is subject to inaccuracies resulting from an increased depth of field. The further away a bar code is from the laser scanning source, the smaller each feature or element of the bar code appears. Therefore, the accuracy of the offset determined by shifting the first two scan fragments into alignment is further diminished. Specifically, as the depth of field increases, the accuracy of the optics and electrical components utilized in a system employing this method must increase accordingly, a difficult task when considering the precise level of the components required for a normal depth of field.